package GestionDatosFM;

import ExcepcionesFM.ExcepcionConsultaSinResultados;
import LogicaFM.*;

public class FormacionDAO {
	public static Formacion selectFormacion(EquipoFantasia equipo, int nro_fecha){
		Formacion r;
		String nombre_equipo = equipo.getNombre();
		Object[][] tmp = null;
		try {
			tmp = EjecutableBD.ejecutarSQL("SELECT jugador_primera.*,tiene.titular,formacion.puntuacion,formacion.trans_disp "
					+ "FROM usuario, formacion, tiene, jugador_primera "
					+ "WHERE usuario.nombre_equipo = '"+nombre_equipo
					+"' AND formacion.tipo_doc = usuario.tipo_doc "
					+" AND formacion.nro_doc = usuario.nro_doc "
					+" AND formacion.nro_fecha = "+nro_fecha
					+" AND formacion.id_formacion = tiene.id_formacion"
					+" AND tiene.id_jugador_primera = jugador_primera.id_jugador_primera");
		} catch (ExcepcionConsultaSinResultados e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		int c_t = 0;
		int c_s = 0;
		
		JugadorPrimera[] titulares = new JugadorPrimera[11];
		JugadorPrimera[] suplentes = new JugadorPrimera[4];
		
		for(int i=0;i<tmp.length;i++){
			JugadorPrimera aux = new JugadorPrimera((int)tmp[i][0],(String)tmp[i][1],(int)tmp[i][2],(String)tmp[i][3],null);
			if((boolean)tmp[i][5]){
				titulares[c_t] = aux;
				c_t++;
			}
			else{
				suplentes[c_s] = aux;
				c_s++;
			}
		}
		
		r = new Formacion(GestorFecha.getFechaActual(),titulares,suplentes,(int)tmp[0][7],(int)tmp[0][6]);
		return r;
		
	}
	
	public static void insertPuntaje(int nro_fecha, EquipoFantasia equipo){
		EjecutableBD.ejecutarUpdate("UPDATE formacion SET puntuacion = "+equipo.getFormacion(GestorFecha.getFechaActual()).getPuntuacion()
									+" WHERE formacion.id_formacion = "
									+"(SELECT formacion.id_formacion "
									+"FROM formacion, usuario "
									+"WHERE usuario.nombre_equipo = '"+equipo.getNombre()
									+"' AND usuario.tipo_doc = formacion.tipo_doc "
									+ "AND usuario.nro_doc = formacion.nro_doc "
									+ "AND formacion.nro_fecha = "+nro_fecha+")");
		System.out.println("UPDATE formacion SET puntuacion = "+equipo.getFormacion(GestorFecha.getFechaActual()).getPuntuacion()
				+" WHERE formacion.id_formacion = "
				+"(SELECT formacion.id_formacion "
				+"FROM formacion, usuario "
				+"WHERE usuario.nombre_equipo = '"+equipo.getNombre()
				+"' AND usuario.tipo_doc = formacion.tipo_doc "
				+ "AND usuario.nro_doc = formacion.nro_doc "
				+ "AND formacion.nro_fecha = "+nro_fecha+")");
	}
	
	public static void nuevasFormaciones (int nro_fecha){
		Object[][] tmp_user = null;
		try {
			tmp_user = EjecutableBD.ejecutarSQL("SELECT DISTINCT tipo_doc, nro_doc "
														+ "FROM formacion "
														+ "WHERE nro_fecha = "+(nro_fecha-1));
		} catch (ExcepcionConsultaSinResultados e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		int id_form = EjecutableBD.max("formacion","id_formacion")+1;
		
		for(int i=0;i<tmp_user.length;i++){
			//Se crea la formacion para la fecha actual
			EjecutableBD.ejecutarUpdate("INSERT INTO formacion "
										+ "VALUES ("+id_form+",0,3,"+(nro_fecha)+",'"+tmp_user[i][0]+"','"+tmp_user[i][1]+"')");
		
			//Obtiene los jugadores de la formacion de la fecha anterior
			Object[][] jugadores = null;
			try {
				jugadores = EjecutableBD.ejecutarSQL("SELECT tiene.id_jugador_primera,tiene.titular "
																+"FROM formacion, tiene "
																+"WHERE formacion.nro_fecha = "+(nro_fecha-1)
																+" AND formacion.tipo_doc = '"+tmp_user[i][0]
																+"' AND formacion.nro_doc = '"+tmp_user[i][1]
																+"' AND formacion.id_formacion = tiene.id_formacion");
			} catch (ExcepcionConsultaSinResultados e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			//En este for se copian los jugadores de la formacion de la fecha anterior, 
			//en la formacion de la fecha actual
			for(int j=0;j<jugadores.length;j++){
				EjecutableBD.ejecutarUpdate("INSERT INTO tiene "
											+ "VALUES ("+id_form+","+jugadores[j][0]+","+jugadores[j][1]+")");
			}
			id_form++;
		}		

	}
}
